Alexander Larsson [Mon, 29 Apr 2013 16:40:10 +0000 (18:40 +0200)]
gdkwindow: Make GdkPaintable normal GdkWindowImpl vfuncs
There is no need for this to be a separate interface, its just looking
weird.
Alexander Larsson [Mon, 29 Apr 2013 14:25:55 +0000 (16:25 +0200)]
gdkwindow: Change how paints work
First of all, we now only do paints on native windows, as there is
really no reason anymore to do it for subwindows. Secondly, we
keep track of the paints even for GtkPaintable windows, but for
that case we don't create the offscreen surface, but rather
assume the windowing system does the backing store.
Alexander Larsson [Thu, 25 Apr 2013 12:00:18 +0000 (14:00 +0200)]
GtkWindow: Move cairo_save/restore from marshaller
We do the save/restore when emitting ::draw rather than in a custom
marshaller, as this saves an extra stack frame, which is helpfull now
that we do painting fully recursive. This is also likely to save a few
cycles.
Alexander Larsson [Wed, 24 Apr 2013 20:21:06 +0000 (22:21 +0200)]
gdkframeclock: Loop the layout phase if needed
In the case where the layout phase queued a layout we don't
want to progress to the paint phase with invalid allocations, so
we loop the layout. This shouldn't normally happen, but it may
happen in some edge cases like if user/wm resizes clash with
natural window size changes from a gtk widget. This should not
generally loop though, so we detect this after 4 cycles and
print a warning.
This was detected because of an issue in GtkWindow where it
seems to incorrectly handle the case of a user interactive resize.
It seems gtk_window_move_resize() believes that configure_request_size_changed
changed due to hitting some corner case so it calls
gtk_widget_queue_resize_no_redraw(), marking the window as need_alloc
after the layout phase. This commit fixes the issue, but we should
also look into if we can fix that.
Alexander Larsson [Fri, 19 Apr 2013 15:40:58 +0000 (17:40 +0200)]
gdkwindow: Simplify invalidation
Now that all windows are non-opaque we can simplify the invalidation
a lot. There is no need to clip the invalidate area to child regions,
because we will always redraw everything under all the children.
We only have to handle native childen specially.
Alexander Larsson [Wed, 17 Apr 2013 21:06:07 +0000 (23:06 +0200)]
gdkwindow: Remove implicit paints
We now only do one expose event per native window, so there will
only be one begin/end_paint() call. This means all the work with
implicit paints to combine the paints on a single double buffer
surface is unnecessary, so we can just delete it.
Alexander Larsson [Wed, 17 Apr 2013 18:55:26 +0000 (20:55 +0200)]
Only handle exposes on native window, propagate to children via draw()
We now consider non-native windows non-opaque, which means any invalid
area in a subwindow will also be invalid all the way up to the nearest
native windows. We take advantage of this by ignoring all expose events
on non-native windows (which typically means just the toplevel) and instead
propagating down the draw() calls to children directly via
gtk_container_propagate_draw.
This is nice as it means we always draw widgets the same way, and it
will let us do some interesting ways in the future.
We also clean up the GtkWidget opacity handling as we can now always
rely on the draing happening via cairo.
We can't really just draw by walking down the widget hierarchy, as
this doesn't get the clipping right (so e.g. widgets doing cairo_paint
may draw outside the expected gdkwindow subarea) nor does it let
us paint window backgrounds.
So, we now do multiple draws for each widget, once for each GdkWindow,
although we still do it on the same base cairo_t that we get for the
toplevel native window. The difference is only the clipping, the rendering
order, and which other widgets we propagate into.
We also collect all the windows of a widget so we can expose them inside
the same opacity group if needed.
NOTE: This change neuters gtk_widget_set_double_buffered for
widgets without native windows. Its impossible to disable
the double buffering in this model.
Alexander Larsson [Wed, 17 Apr 2013 15:10:18 +0000 (17:10 +0200)]
gdkwindow: Remove ancient USE_BACKING_STORE define
This is always set anyway.
Alexander Larsson [Wed, 17 Apr 2013 15:05:49 +0000 (17:05 +0200)]
gdkwindow: Simplify clip region calculations
Since we no longer make overlapping siblings affect clip_region we
can further simplify the clip region calculation and updating.
Alexander Larsson [Wed, 17 Apr 2013 14:36:52 +0000 (16:36 +0200)]
gdkwindow: Simplify clip region handling
Since we dropped the move region optimization there is really no need
to try carefully keep track of opaque non-overlapped regions, as we
don't use this information to trigger the optimization anymore.
So, by assuming that all windows are non-opaque we can vastly simplify
the clip region stuff. First of all, we don't need clip_region_with_children,
as each window will need to draw under all children anyway. Secondly, we
don't remove overlapping sibling areas from clip_region, as these are
all non-opaque anyway and we need to draw under them
Finally, we don't need to track the layered region anymore as its
essentially unused. The few times something like it is needed we can
compute it explicitly.
For the case of native children of widgets we may cause a repaint
under native windows that are guaranteed to be opaque, but these
will be clipped by the native child anyway.
Alexander Larsson [Wed, 17 Apr 2013 12:15:51 +0000 (14:15 +0200)]
gdkwindow: Remove translate vfunc
This is not used anymore
Alexander Larsson [Wed, 17 Apr 2013 12:02:32 +0000 (14:02 +0200)]
gdkwindow: Remove outstanding_moves stuff
Since we now never move regions directly on the window we can
remove all the stuff that track outstanding moves and flushes then.
Alexander Larsson [Wed, 17 Apr 2013 11:13:46 +0000 (13:13 +0200)]
gdk: Don't ever do copies from the window
This basically neuters gdk_window_move_region, gdk_window_scroll
and gdk_window_move_resize, in that they now never copy any bits but
just invalidate the source and destination regions. This is a performance
loss, but the hope is that the simplifications it later allows will let
us recover this performance loss (which mainly affects scrolling).
Matthias Clasen [Tue, 7 May 2013 12:48:01 +0000 (08:48 -0400)]
Add more test cases
These are taken from
https://bugzilla.gnome.org/show_bug.cgi?id=696882
Benjamin Otte [Tue, 7 May 2013 12:03:52 +0000 (14:03 +0200)]
imcontexts: Include config.h first
Benjamin Otte [Tue, 7 May 2013 11:46:51 +0000 (13:46 +0200)]
reftests: Make window size not influence test
The test is supposed to definitely wrap, make sure it does.
Benjamin Otte [Tue, 7 May 2013 11:46:15 +0000 (13:46 +0200)]
checkbutton: Implement height-for-width
Benjamin Otte [Tue, 7 May 2013 11:18:00 +0000 (13:18 +0200)]
checkbutton: Split out a common function
Makes size request / allocation code easier to understand.
Kalev Lember [Tue, 7 May 2013 11:41:21 +0000 (13:41 +0200)]
GtkPlacesSidebar: Fix an uninitialized variable in the error code path
Initialize it to NULL early so that we won't try to free an
uninitialized variable when handling an error.
Kalev Lember [Tue, 2 Apr 2013 22:35:27 +0000 (00:35 +0200)]
gtksizegroup: Add explicit braces to avoid dangling else
Otherwise the else after the for loop becomes attached to the wrong if.
Matthias Clasen [Tue, 7 May 2013 10:11:42 +0000 (06:11 -0400)]
Add a testcase for the dnd window breakage
Matthias Clasen [Tue, 7 May 2013 10:00:13 +0000 (06:00 -0400)]
Remove abi checking scripts
The exported symbols are now controlled explicitly from the headers,
no need to double-check.
Yaron Shahrabani [Tue, 7 May 2013 08:25:25 +0000 (11:25 +0300)]
Updated Hebrew translation.
Alexander Larsson [Mon, 6 May 2013 15:48:46 +0000 (17:48 +0200)]
GtkEventBox: Correctly handle height for width
We need to pass on the width to the child.
https://bugzilla.gnome.org/show_bug.cgi?id=699140
Alexander Larsson [Mon, 6 May 2013 14:05:08 +0000 (16:05 +0200)]
css shadow: Add extra slop to the blur clipping
Turns out our blurring function isn't very nice, it has a lot
of energy past the blur radius, so clipping at exactly the
blur radius causes ugly gradient stops. This just adds 4
extra pixels of slop, which makes this better in most cases.
Alexander Larsson [Mon, 6 May 2013 11:06:13 +0000 (13:06 +0200)]
css shadows: Split up rendering of shadows
We split up the rendering of blurred shadows into 9 parts, the
corners, the sides and the rest. This lets us only blur the "blurry"
part, and it lets us completely skip blurry parts that are fully
clipped.
Alexander Larsson [Mon, 6 May 2013 10:34:09 +0000 (12:34 +0200)]
css shadows: Exit early if clip is empty
Alexander Larsson [Mon, 6 May 2013 07:48:10 +0000 (09:48 +0200)]
GtkCssShadowValue: Break out the shadow rendering code
This makes it easier to call it multiple times which we
want to do later.
Alexander Larsson [Fri, 3 May 2013 10:50:18 +0000 (12:50 +0200)]
css: Clip outset box-shadow to outside of box
As per css3-background 7.2. Drop Shadows: the ‘box-shadow’ property:
An outer box-shadow casts a shadow as if the border-box of the element
were opaque. The shadow is drawn outside the border edge only: it
is clipped inside the border-box of the element.
Also verified vs firefox behaviour.
Stef Walter [Mon, 6 May 2013 09:03:21 +0000 (11:03 +0200)]
gtksettings: Fix loading of uint settings
https://bugzilla.gnome.org/show_bug.cgi?id=699739
Matthias Clasen [Sun, 5 May 2013 18:27:25 +0000 (14:27 -0400)]
Remove regex-based export control
All export control is now happening through annotations
in the headers.
Matthias Clasen [Sun, 5 May 2013 18:24:26 +0000 (14:24 -0400)]
Add visibility flags in gtk/a11y
Matthias Clasen [Wed, 20 Mar 2013 22:17:00 +0000 (18:17 -0400)]
New visibility handling in gtk
Matthias Clasen [Fri, 15 Mar 2013 10:35:30 +0000 (06:35 -0400)]
New visibility handling in gdk
Change the visibility handling to be the same way we do it in
GLib now. We pass -fvisibility=hidden to gcc and decorate public
functions with __attribute__((visibility("default"))).
This commit just does this for GDK, GTK+ will follow later.
Matthias Clasen [Sun, 5 May 2013 14:31:08 +0000 (10:31 -0400)]
Ignore deprecations where needed
There are a few places where we are still using deprecated
API internally - ignore deprecations around these uses.
Matthias Clasen [Sun, 5 May 2013 14:28:54 +0000 (10:28 -0400)]
Fix up headerless symbols
Some symbols are exported from GTK+, but do not appear in any
headers. For these, use _GDK_EXTERN in the source file to make
sure they are exported.
Matthias Clasen [Sun, 5 May 2013 18:24:55 +0000 (14:24 -0400)]
Add annotations in a11y headers
Matthias Clasen [Wed, 20 Mar 2013 22:17:32 +0000 (18:17 -0400)]
Add annotations to gtk headers
Add annotations to all exported functions in GTK+ headers.
Matthias Clasen [Wed, 20 Mar 2013 18:38:59 +0000 (14:38 -0400)]
gtk: Use GDK_AVAILABLE_IN_ALL for generated enum types
glib-mkenums is not currently clever enough to know which version an
enum type was added in, so just mark all the _get_type() functions as
available in all versions.
Matthias Clasen [Sun, 5 May 2013 15:32:20 +0000 (11:32 -0400)]
Just ignore deprecations inside deprecated/
Not worth tracking uses of deprecated API individually here.
Matthias Clasen [Fri, 15 Mar 2013 12:30:23 +0000 (08:30 -0400)]
Use _GDK_EXTERN when defining the decorators
Make all GDK_DEPRECATED and GDK_AVAILABLE macros use a
new _GDK_EXTERN macro. _GDK_EXTERN defaults to just 'extern'
but a subsequent commit will add visibility handling to it
while building GTK+.
Matthias Clasen [Fri, 15 Mar 2013 09:58:39 +0000 (05:58 -0400)]
Add GDK_AVAILABLE_IN_ALL annotations in gdk
This is in preparation to modernizing our handing
of exported symbols.
Matthias Clasen [Fri, 15 Mar 2013 10:50:34 +0000 (06:50 -0400)]
Use GDK_AVAILABLE_IN_ALL for generated enum types
glib-mkenums is not currently clever enough to know which version an
enum type was added in, so just mark all the _get_type() functions as
available in all versions.
Matthias Clasen [Fri, 15 Mar 2013 01:22:22 +0000 (21:22 -0400)]
gdkversionmacros.h: add GDK_AVAILABLE_IN_ALL
Add a macro to declare that a particular symbol is available in all
versions of GTK+.
All newly-added symbols should have proper version macros (like
GDK_AVAILABLE_IN_3_4).
Matthias Clasen [Sun, 5 May 2013 16:16:51 +0000 (12:16 -0400)]
gtk-demo: Include config.h first
If config.h is included after gdkversionmacros.h, _GDK_EXTERN
gets redefined and cpp doesn't like that.
Matthias Clasen [Sun, 5 May 2013 16:16:16 +0000 (12:16 -0400)]
gtk-demo: Don't include config.h needlessly
It is not needed here.
Matthias Clasen [Sun, 5 May 2013 18:26:33 +0000 (14:26 -0400)]
Remove an unused private function
_gtk_text_layout_get_line_xrange was not exported and not used
inside GTK+ either.
Victor Ibragimov [Sun, 5 May 2013 14:22:27 +0000 (19:22 +0500)]
Updated Tajik Translation
Matthias Clasen [Sat, 4 May 2013 23:21:56 +0000 (19:21 -0400)]
Always use gint for border_width
This avoids an evil trap when doing MAX (..., ... - 2 * border_width)
and the expression on the right gets promoted to unsigned, instead
of going negative as you would expect.
https://bugzilla.gnome.org/show_bug.cgi?id=699633
Ignacio Casal Quinteiro [Sat, 4 May 2013 20:51:37 +0000 (22:51 +0200)]
window: handle titlebar property for the buildable interface
Matthias Clasen [Sun, 28 Apr 2013 21:50:01 +0000 (17:50 -0400)]
Some window size test tweaks
Draw a checkerboard pattern, and add an interactive mode that
waits for events before moving on. This makes it easier to see
when a size is wrong.
Matthias Clasen [Sat, 27 Apr 2013 22:01:19 +0000 (18:01 -0400)]
Add some more GtkWindow tests
These tests check that a toplevel window ends up with the expected
size after setting default sizes or resizing. It currently passes
on X, but fails with client-side decorations under X and Wayland.
Matthias Clasen [Sat, 4 May 2013 20:11:00 +0000 (16:11 -0400)]
Prevent criticals when initializing a Wayland display
When we call _gdk_wayland_display_load_cursor_theme during
the initial opening of the first display, gdk_setting_get does
not work yet, since it relies on the default display/screen
being set, which only happens after open returns.
Instead, just use the screen of this display.
Matthias Clasen [Sat, 4 May 2013 02:29:20 +0000 (22:29 -0400)]
Fix setting child properties
This was broken in
e9f182e37a7f6e2dc339054841a3c9f930f573ed
Matthias Clasen [Sat, 4 May 2013 00:03:12 +0000 (20:03 -0400)]
Don't clear data on a NULL screen
This makes GtkSettings survive the object finalize test.
John Ralls [Fri, 3 May 2013 23:41:49 +0000 (16:41 -0700)]
Bug 606378 - gdk doesn't handle non-main thread rendering on Quartz
Document that the restrictions on Win32 apply also to Quartz.
Stefan Sauer [Fri, 3 May 2013 18:39:24 +0000 (20:39 +0200)]
widget: fix two typos in api-docs
Colin Walters [Thu, 2 May 2013 22:32:07 +0000 (18:32 -0400)]
reftests: Don't use spaces in Makefile first line
Otherwise Emacs makes one's life miserable.
Guillaume Desmottes [Thu, 25 Apr 2013 14:30:12 +0000 (16:30 +0200)]
treemodelsort: destroy the root only if we are removing the latest row of the level
GtkIconView doesn't ref the rows of the model so we have to make sure that a
level is actually empty before destroying it.
https://bugzilla.gnome.org/show_bug.cgi?id=698846
Matthias Clasen [Fri, 3 May 2013 01:36:45 +0000 (21:36 -0400)]
Make it possible to finalize theming engines
This was broken since forever. Good that we never finalize
theme engines...
Matthias Clasen [Fri, 3 May 2013 00:43:34 +0000 (20:43 -0400)]
GtkInvisible behaves like GtkWindow
As far as refcounting is concerned, invisibles are like
windows: you have to destroy them.
Matthias Clasen [Fri, 3 May 2013 00:42:24 +0000 (20:42 -0400)]
Only check for finalization after a grace period
This makes the file chooser pass this test
Matthias Clasen [Fri, 3 May 2013 00:00:49 +0000 (20:00 -0400)]
Prevent a segfault if GtkAppChooserDialog gets disposed early
If the async call is finished after the dialog is already disposed,
bad things happen. Prevent that by marking the dialog as dismissed
in this case.
Benjamin Otte [Thu, 2 May 2013 14:27:47 +0000 (16:27 +0200)]
gdk: Remove new gdk_display_manager_peek() API
It's not necessary anymore because gdk_display_manager_get() always
succeeds and the value is independant of when it was called as it's no
longer backend specific.
Benjamin Otte [Thu, 2 May 2013 14:26:37 +0000 (16:26 +0200)]
window: Handle attach widget disappearing without weak pointers
Fixes the window not emitting a "notify::attached-to" signal when the
attach-widget goes away.
Benjamin Otte [Thu, 2 May 2013 14:17:30 +0000 (16:17 +0200)]
displaymanager: Remove GInitable implementation
This is not needed anymore, as only one type exists and that type can
always be instantiated.
Benjamin Otte [Thu, 2 May 2013 14:15:02 +0000 (16:15 +0200)]
broadway: Remove displaymanager implementation
This is an API break, but the broadway backend is unsupported, so we can
get away with it.
Benjamin Otte [Thu, 2 May 2013 14:12:53 +0000 (16:12 +0200)]
wayland: Remove displaymanager implementation
This is an API break, but the wayland backend is unsupported, so we can
get away with it.
Benjamin Otte [Thu, 2 May 2013 14:09:09 +0000 (16:09 +0200)]
displaymanager: Don't create backend-specific display managers
Just create a backend-agnostic displaymanager. Creating the displays
later on determines the backend in use.
Benjamin Otte [Thu, 2 May 2013 14:06:21 +0000 (16:06 +0200)]
displaymanager: Copy logic to display creation
Use the same logic for display creation in
gdk_display_manager_open_display() that is used for displaymanager
creation.
Benjamin Otte [Thu, 2 May 2013 13:43:09 +0000 (15:43 +0200)]
quartz: Move initialization code to display_class_init
This follows the same reasoning as the X11 backend in commit
0122a9da8eab518652553aa4e777d5caf18a6163
Benjamin Otte [Thu, 2 May 2013 13:36:41 +0000 (15:36 +0200)]
win32: Call windowing init from display_class_init()
This follows the same reasoning as the X11 backend in commit
0122a9da8eab518652553aa4e777d5caf18a6163
Benjamin Otte [Thu, 2 May 2013 13:26:33 +0000 (15:26 +0200)]
a11y: Remove AtkSelection implementation from combobox
AtkSelection requires that the immediate children of the object are the
selectable items. The combobox however is implemented with just 1 child:
The popup menu.
The popup menu is implementing the selectable interface.
Test are updated to reflect this change.
Matthias Clasen [Thu, 2 May 2013 13:29:35 +0000 (09:29 -0400)]
Try this again
When the hostnamed call is cancelled, we get a G_IO_ERROR_CANCELLED
error back. Handle it properly.
Matthias Clasen [Thu, 2 May 2013 12:21:42 +0000 (08:21 -0400)]
Revert "Remove a superfluous ref"
This reverts commit
f326c0eac806b037c7100309887ffc5f9193070d.
Grr, turns out that cancelling is not that reliable :-(
Matthias Clasen [Thu, 2 May 2013 12:02:40 +0000 (08:02 -0400)]
Clear list of attached windows when disposing a widget
We were silently relying on everybody to detach their windows,
and would leak memory otherwise.
Matthias Clasen [Thu, 2 May 2013 12:01:14 +0000 (08:01 -0400)]
GtkWindow: use a weak ref to keep track of attach_widget
Taking a full reference of the attach widget creates a reference
cycle, and keeps the attach_widget alive longer than it should.
Matthias Clasen [Thu, 2 May 2013 09:53:40 +0000 (05:53 -0400)]
Remove a superfluous ref
If we cancel the call in dispose, no need to ref the object
we pass as userdata. Avoids the risk of leaking the ref if
the call is actually canceled.
Matthias Clasen [Thu, 2 May 2013 09:37:58 +0000 (05:37 -0400)]
Fix build
Matthias Clasen [Thu, 2 May 2013 02:23:11 +0000 (22:23 -0400)]
Revert "Temporarily remove window-border reftest"
This reverts commit
cf6695088e1fe98acdd2ac2e3b5c2f0dd4e7cc5b.
Matthias Clasen [Thu, 2 May 2013 02:22:22 +0000 (22:22 -0400)]
Revert "Disable the filechooser template tests"
This reverts commit
17b9733372f763805b50165f945eee65517c8f06.
Matthias Clasen [Thu, 2 May 2013 02:22:09 +0000 (22:22 -0400)]
Revert "Disable the object-finalize test for now"
This reverts commit
a021dc793c163fd427c28d13f49dbf7933d38a46.
Matthias Clasen [Thu, 2 May 2013 02:20:58 +0000 (22:20 -0400)]
Reenable display manager tests
Still broken, but they test the right thing.
Matthias Clasen [Thu, 2 May 2013 02:06:46 +0000 (22:06 -0400)]
Bump version
Matthias Clasen [Thu, 2 May 2013 01:43:19 +0000 (21:43 -0400)]
Remove window-border tests from makefile too
Matthias Clasen [Thu, 2 May 2013 01:35:39 +0000 (21:35 -0400)]
Silence a compiler warning
Matthias Clasen [Thu, 2 May 2013 01:31:12 +0000 (21:31 -0400)]
Revert "Temporarily remove button-wrapping reftest"
This reverts commit
851b631c4e8919530a49346118027a2acdf0a1b8.
Matthias Clasen [Thu, 2 May 2013 01:27:25 +0000 (21:27 -0400)]
Fix up doc sections
Matthias Clasen [Thu, 2 May 2013 01:27:06 +0000 (21:27 -0400)]
Minor doc comment fix
Matthias Clasen [Thu, 2 May 2013 01:23:55 +0000 (21:23 -0400)]
Make gtkplacessidebar.h look like a gtk header
Matthias Clasen [Thu, 2 May 2013 01:19:37 +0000 (21:19 -0400)]
GtkPlacesSidebar: Correct all since tags
Matthias Clasen [Thu, 2 May 2013 01:03:55 +0000 (21:03 -0400)]
Disable broken picker a11y test
The GtkComboBox accessible implementation is pretty broken,
and it shows through in this a11y test. Disable it for now.
Matthias Clasen [Wed, 1 May 2013 22:53:30 +0000 (18:53 -0400)]
Update a few a11y test results
Matthias Clasen [Wed, 1 May 2013 21:03:48 +0000 (17:03 -0400)]
Fix image-load-from-file reftest
Need to reset css here to avoid theme interference.
Matthias Clasen [Wed, 1 May 2013 20:55:12 +0000 (16:55 -0400)]
Temporarily remove grid-span reftest
This was testing grid size allocation changes that had to be
reverted because they broke gnumeric.
Matthias Clasen [Wed, 1 May 2013 20:51:45 +0000 (16:51 -0400)]
Temporarily remove window-border reftest
It is broken by unfinished csd changes.
Matthias Clasen [Wed, 1 May 2013 20:50:59 +0000 (16:50 -0400)]
Temporarily remove button-wrapping reftest
Its broken by unsettled GtkBin size allocation changes.
Piotr Drąg [Wed, 1 May 2013 21:48:33 +0000 (23:48 +0200)]
Updated POTFILES.skip
Benjamin Otte [Wed, 1 May 2013 21:26:27 +0000 (23:26 +0200)]
paned: Fixup recent commit
d90e3670cef44c688763f15d5695f84ebe985855 had a bunch of embarrassing
bugs.
Fixes paned-undersized reftest.
Benjamin Otte [Wed, 1 May 2013 16:12:38 +0000 (18:12 +0200)]
wayland: Don't add/remove displays manually
This code is handled by GdkDisplay itself these days.